home *** CD-ROM | disk | FTP | other *** search
/ Die Speccy' 97 / Die Speccy' 97.iso / amiga_system / the_aminet / comm / bbs / bbbbs85.lha / rexx / bbsMAINT.baud < prev    next >
Text File  |  1994-05-17  |  5KB  |  223 lines

  1. /* $VER: bbsMAINT.baud 7.3 (17.5.94) copyright 1990-94 Richard Lee Stockton
  2. FREELY DISTRIBUTABLE
  3.  
  4. this will check all message dirs for oldest messages, (that don't
  5. have '!!' as the first characters), and delete a few (1%) of them
  6. This macro is called after logout IF the grand total of messages
  7. exceeds the maximum set in the CONFIG.BBS file. Note that as of 4.0
  8. messages are copied to the sysop's email drawer before deletion.
  9. V5.9: a minimum of 10 messages are left in each conference.
  10. V7.1: deletes old EMail BBBBS_ archives if BBBBS_DAYS_OLD>0.
  11. V7.2: Appends to report called BBBBS.0 in sysop's email.
  12. V7.3: deletes old EMail QUICK_ archives if BBBBS_DAY_OLD>0
  13.  
  14. dat.conf.0=lowest
  15. dat.conf.1=highest
  16. dat.conf.2=oldest
  17. dat.conf.3=seqdate of oldest
  18. */
  19.  
  20. BBBBS_DAYS_OLD=0  /* set >0 to delete BBBBS. archives older than this */
  21.  
  22. bbspath=GETCLIP('BBS_path')
  23. msgpath=GETCLIP('BBS_msgpath')
  24.  
  25. ARG SYSTEM_MSG_LIMIT sysop .
  26.  
  27. arg=bbspath'Email/'sysop'/BBBBS.0'
  28. IF EXISTS(arg) THEN ot='A'
  29. ELSE ot='W'
  30. CALL CLOSE(STDOUT)
  31. CALL OPEN(STDOUT,arg,ot)
  32. SAY CENTER(' REPORT ',75,'=')
  33. SAY STRIP(SUBSTR(SOURCELINE(1),10))
  34. SAY DATE('W') DATE() TIME('C')
  35.  
  36. IF BBBBS_DAYS_OLD>0 THEN
  37.   DO
  38.     SAY 'Checking BBBBS archives...'
  39.     idate=DATE('I')-BBBBS_DAYS_OLD
  40.     users=SHOWDIR(bbspath'EmailFiles','D')
  41.     tot=0
  42.     DO i=1 TO WORDS(users)
  43.       user=WORD(users,i)
  44.       IF user=sysop THEN ITERATE i
  45.       bbf.=''
  46.       IF FileList(bbspath'EmailFiles/'user'/*',bbf)>0 THEN
  47.         DO j=1 TO bbf.0
  48.           finfo=STATEF(bbf.j)
  49.           IF WORD(finfo,5)>idate THEN ITERATE j
  50.           size=WORD(finfo,2)
  51.           IF POS('BBBBS_',bbf.j)=0 & POS('QUICK_',bbf.j)=0 THEN
  52.             DO
  53.               SAY RIGHT(size,7) SPACE(DATE(,WORD(finfo,5),'I')) bbf.j 'NOT deleted.'
  54.               ITERATE j
  55.             END
  56.           tot=tot+size
  57.           IF DELETE(bbf.j) THEN
  58.             SAY RIGHT(size,7) SPACE(DATE(,WORD(finfo,5),'I')) bbf.j 'deleted.'
  59.           IF UPPER(RIGHT(bbf.j,4))='.LHA' THEN
  60.             DO
  61.               fnum=SUBSTR(bbf.j,LASTPOS('_',bbf.j)+1)
  62.               fnum=LEFT(fnum,LENGTH(fnum)-4)
  63.               mail=bbspath'Email/'user'/BBBBS.'fnum
  64.               finfo=STATEF(mail)
  65.               size=WORD(finfo,2)
  66.               IF DATATYPE(size,'N') THEN tot=tot+size
  67.               IF DELETE(mail) THEN
  68.                 SAY RIGHT(size,7) SPACE(DATE(,WORD(finfo,5),'I')) mail 'deleted'
  69.             END
  70.         END
  71.     END
  72.     SAY '  'tot 'bytes purged.  Completed at' TIME('C')
  73.     SAY
  74.   END
  75.  
  76. dat.=''
  77. dat.0.1=0
  78. totmsgs=0
  79. DO conf=1 TO 99
  80.   dat.conf.2=0
  81.   temp=WORDS(SHOWDIR(msgpath'MSG'conf))
  82.   IF temp=0 THEN
  83.     DO
  84.       dat.conf.1=0
  85.       ITERATE conf
  86.     END
  87.   totmsgs=totmsgs+temp
  88. END
  89. IF totmsgs<SYSTEM_MSG_LIMIT THEN EXIT
  90.  
  91. tot2kill=SYSTEM_MSG_LIMIT%100
  92. IF tot2kill<1 THEN tot2kill=1
  93. tot2kill=tot2kill+totmsgs-SYSTEM_MSG_LIMIT
  94. killed=0
  95. SAY 'Purging' tot2kill 'public messages.'
  96.  
  97. DO conf=1 TO 99
  98.   IF dat.conf.1=0 THEN ITERATE conf
  99.   dat.conf.0=countcheck('FirstMessage'conf)
  100.   dat.conf.1=countcheck('LastMessage'conf)
  101.   dat.conf.2=dat.conf.0-1
  102.   CALL get_next()
  103. END
  104.  
  105. DO k=1 TO tot2kill
  106.   conf=which()
  107.   temp=dat.conf.2
  108.   IF temp>0 THEN
  109.     IF kill_one(temp) THEN
  110.       killed=killed+1
  111. END
  112. SAY
  113. EXIT
  114.  
  115.  
  116.  
  117. which:
  118. oldest=99999999
  119. oldnum=0
  120. DO i=1 TO 99
  121.   IF dat.i.1=0 | dat.i.3='' THEN ITERATE i
  122.   IF dat.i.3<oldest THEN
  123.     DO
  124.       oldest=dat.i.3
  125.       oldnum=i
  126.     END
  127. END
  128. RETURN oldnum
  129.  
  130.  
  131. get_next:
  132. IF dat.conf.1=0 | dat.conf.1=dat.conf.2 THEN RETURN
  133. thisconf=msgpath'MSG'conf
  134. msglist=SHOWDIR(thisconf)
  135. IF WORDS(msglist)<11 THEN
  136.   DO
  137.     dat.conf.1=0
  138.     RETURN
  139.   END
  140. dat.conf.3=''
  141. DO msgnum=dat.conf.2+1 TO dat.conf.1-1
  142.   IF FIND(msglist,msgnum)=0 THEN ITERATE msgnum
  143.   dat.conf.3=get_date(msgnum)
  144.   IF dat.conf.3~='' THEN LEAVE msgnum
  145. END
  146. dat.conf.2=msgnum
  147. IF msgnum=dat.conf.1 THEN dat.conf.1=0
  148. RETURN
  149.  
  150.  
  151. get_date:
  152. ARG msg .
  153. x=OPEN(f,thisconf'/'msg,'R')
  154. IF x=0 THEN RETURN ''
  155. line=READLN(f)
  156. IF LEFT(line,2)='!!' THEN
  157.   DO
  158.     CALL CLOSE(f)
  159.     RETURN ''
  160.   END
  161. line=READLN(f)
  162. line=READLN(f)
  163. line=READLN(f)
  164. line=READLN(f)
  165. CALL CLOSE(f)
  166. dateline=SPACE(WORD(line,3) WORD(line,4) WORD(line,5),1)
  167. seqdate=norm2seq(dateline)
  168. RETURN seqdate
  169.  
  170.  
  171. kill_one:
  172. ARG killnum .
  173. x=OPEN(f,msgpath'MSG'conf'/'killnum,'R')
  174. IF x=0 THEN RETURN 0
  175. data=READCH(f,65000)
  176. CALL CLOSE(f)
  177. CALL DELAY(28)
  178. mailname='MSG'conf'.'killnum
  179. x=OPEN(f,bbspath'Email/'sysop'/'mailname,'W')
  180. IF x=0 THEN RETURN 0
  181. CALL WRITECH(f,data)
  182. CALL CLOSE(f)
  183. CALL DELETE(msgpath'MSG'conf'/'killnum)
  184. CALL get_next()
  185. RETURN 1
  186.  
  187.  
  188. countcheck:
  189. PARSE ARG filename
  190. IF filename='' THEN RETURN 0
  191. filename=bbspath'Numbers/'filename
  192. x=OPEN(f,filename,'R')
  193. IF x=0 THEN RETURN 0
  194. cc=READLN(f)
  195. CALL CLOSE(f)
  196. RETURN cc
  197.  
  198.  
  199. norm2seq:     /* takes '3 Jan 1990' and turns it into '19900103' */
  200. ARG da' 'mo' 'yr .
  201. da=da/1
  202. mo=STRIP(mo)
  203. yr=yr/1
  204. IF da<10 THEN da='0'da
  205. SELECT
  206.   WHEN mo='JAN' THEN mo='01'
  207.   WHEN mo='FEB' THEN mo='02'
  208.   WHEN mo='MAR' THEN mo='03'
  209.   WHEN mo='APR' THEN mo='04'
  210.   WHEN mo='MAY' THEN mo='05'
  211.   WHEN mo='JUN' THEN mo='06'
  212.   WHEN mo='JUL' THEN mo='07'
  213.   WHEN mo='AUG' THEN mo='08'
  214.   WHEN mo='SEP' THEN mo='09'
  215.   WHEN mo='OCT' THEN mo='10'
  216.   WHEN mo='NOV' THEN mo='11'
  217.   WHEN mo='DEC' THEN mo='12'
  218.   OTHERWISE RETURN(-1);
  219. END
  220. RETURN yr||mo||da
  221.  
  222. /* bbsMAINT.baud */
  223.